草庐IT

MySQL Workbench 符号引用

全部标签

c++ - 正确命名的临时对象和右值引用/移动

在C++11之前,作为一种标准的编程习惯,临时变量通常被分配给变量以使代码更清晰。对于小型类型,通常会制作一个拷贝,对于较大的类型,可能会制作一个引用,例如:inta=int_func();Tconst&obj=obj_func();some_func(a,obj);现在,将其与内联表单进行比较:some_func(int_func(),obj_func());在C++11之前,这具有几乎相同的语义。随着右值引用和移动语义的引入,上面的内容现在完全不同了。特别是,通过强制obj键入Tconst&,您已经删除了使用移动构造函数的能力,而内联形式的类型可以是T&&代替。鉴于第一个是通用范例

C++ const 语义引用

如果代码中有如下内容:func(constbase&obj)const语义是什么意思?这里的常数是什么?obj是对非常量对象的const引用还是对const对象的非常量引用? 最佳答案 没有“非常量”引用这样的东西,也就是说,引用总是绑定(bind)到同一个对象,而且没有办法改变它。"consttype&"表示对const类型的引用。 关于C++const语义引用,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - 参数通过引用传递给指针问题

每次我尝试编译我的代码时都会出现错误:cannotconvertparameter1from'int*'to'int*&'测试代码如下所示:voidset(int*&val){*val=10;}intmain(){intmyVal;int*pMyVal=newint;set(&myVal);//我想一次调用该函数,而不是在某处创建一个指针来传递它。由于指针没有构造函数,因此无法完成类似的操作:set(int*(&myVal));有没有其他方法可以通过引用传递指针而不需要创建临时变量?编辑:顺便说一句,我知道为什么代码无法编译(我只是传递可能是int而不是实际指针的地址)。问题是它还能如

C++:有符号 64 位整数中两个无符号 64 位整数的差

我正在尝试用C++编写一个函数,它接受两个64位无符号整数,并以一个有符号的64位整数返回它们的差值。由于溢出的情况似乎有点复杂-由于输入是两个无符号正整数,如果这两个之间的绝对差大于最大有符号值(INT64_MAX),则不能通过有符号整数传递差值。所以我写了下面的实现,我想知道,首先,这在功能上是否正确,其次,是否有更简单的实现。任何建议将不胜感激。谢谢!(我将用异常替换断言,它只是现在!)int64_tGetDifference(uint64_tfirst,uint64_tsecond){uint64_tabs_diff=(first>second)?(first-second):

c++ - 总是使用指针而不是引用是否可以接受,以便在需要时轻松转换为智能指针?

我知道引用优于指针,但更改所有这些“.”非常乏味。需要时“->”。那么总是使用指针而不是引用是一种可以接受的做法,以便在需要时轻松地将它们转换为智能指针吗?或者有什么方法可以快速更改对指针的引用? 最佳答案 Soisitanacceptablepracticetoalwaysusepointersinsteadofreferences,tobeeasilyconvertthemtosmartpointersifneeded没有。一般来说,always规则总是不好的。(包括这个)。为什么要将引用转换为智能指针?如果它是引用,则无需担心

c++ - 通过 const 引用传递 Qt 类

众所周知,Qt类使用copy-on-wite按值传递时。因此,直到需要时才进行复制。当只需要对对象进行只读访问时,我已经看到很多次通过const引用传递Qt类。为什么人们传递constQString&而不是简单的QString如果在这两种情况下都没有完成复制? 最佳答案 这是因为魔法是有代价的。QString不会复制整个字符串,但会计算引用。QString的多次复制会减慢程序的速度。如果constQString&足以满足您的需求,为什么不使用它呢?它仍然更快。 关于c++-通过const

C++ 构造函数——通过引用传递仅适用于 const。为什么?

所以今天早些时候,我正在catch很好的旧C++,当我编译我的代码时它不工作。像一些程序员一样,我开始四处寻找,最终发现添加键盘const可以解决问题。但是,我不太喜欢黑客攻击,想知道为什么代码在添加const后运行良好。这是我在将const添加到构造函数之前的代码:#include#includeusingnamespacestd;classNames{private:string_name;string_surname;public:Names(string&name,string&surname):_name(name),_surname(surname){}stringgetN

带有箭头符号的 C++ 模板自动返回类型需要 decltype?

C++11为函数中的返回类型引入了箭头符号(不知道名字):templateautofun(T&&a)->decltype(bar(a)){...}但根据scottmeyer的说法,单独使用auto作为返回类型将删除所有const和引用限定符(因为它遵循与模板推导相同的模式),因此惯用的方法是执行decltype(auto)将所有限定符保持在类型之上。但是,在这种情况下,auto是否被推断为decltype(bar(a))?那么decltype(auto)会是decltype(decltype(bar(a)))吗?那会是多余的吗? 最佳答案

c++ float* 数组作为对 std::vector<float> 的引用

我想创建一个std::vectorvpd这将是对float*的引用.float*old=newfloat[6];for(inti=0;ivpd(6);autorefasd=&*vpd.begin();*refasd=*old;vpd[0]=23;cout如果我想得到23,我应该如何修改代码呢?来自cout? 最佳答案 你不能。std::vector并非旨在获取原始指针的所有权。也许你可以凑合用std::unique_ptr,但更好的解决方案是直接使用std::vector. 关于c++f

c++ - "dynamic_cast"之后的 NULL 指针实际上可以取消引用吗?

以下代码编译正确并得到神秘的输出:specialInvestmentfunction00000000(环境:C++VS2010)#include#includeusingnamespacestd;classSecurity{public:virtual~Security(){}};classStock:publicSecurity{};classInvestment:publicSecurity{public:voidspecial(){cout(p)->special();cout(p)怎么可能呢?取消引用NULL指针并获得“正确”输出而不是崩溃?是VS2010的特殊“特性”吗?现在